#line 1 "F:/MidiFoot_LCD/svn/MidienC.c"
#line 31 "F:/MidiFoot_LCD/svn/MidienC.c"
const unsigned int _long_button_time = 2000;
const char _Num_Opciones_Menu = 3;
const char _Inicio_EEprom_Usuario = 0x1F;
const char _parametros_preset = 8;
const char _num_presets_usuario = 28;



int programa,programa_ant;

char canal;

char banco,banco_ant;

bit flanco1,flanco2,flanco3,flanco4,flanco5,flanco6;

char ult_pulsador=0;

unsigned long tiempo_pulsacion=0;


bit modo;
bit touch_mode;
bit modo_reset;



bit Modo_menu;

char opcion_menu;

char valor_menu;

bit edito_menu;

unsigned char menu_canales[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};


int i;
#line 81 "F:/MidiFoot_LCD/svn/MidienC.c"
unsigned char welcome[] = {'W','a','r','r','i','o','r',' ','M','i','d','i','f','o','o','t'};
unsigned char welcome2[] = {'v','e','r',' ','6','.','7'};


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;


sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;


const unsigned short NumGrandes[] = {
 0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00,
 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 0x1E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00,
 0x1E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1E, 0x00,
 0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00
 };


unsigned char digito_sup[10] = {0,1,4,4,2,3,3,4,7,7} absolute 0x20;
unsigned char digito_inf[10] = {2,1,5,6,1,6,7,1,7,1} absolute 0x2A;


struct Preset {
 char PrgChange1;
 char MidiCh1;
 char PrgChange2;
 char MidiCh2;
 char CC1Code;
 char CC1value;
 char CC2Code;
 char CC2value;
} PresetUsuario;









const char txtBANK[]= "BANK";
const char txtPROG[]= "PROG";
const char txtConf[] = "CONFIGURACION";
const char txtMidiCh[] = "CANAL MIDI:";
const char txtMODO[]= "MODO:";
const char txtTOUCHMODE[]= "TOUCHMODE:";
const char txtRESET[]="RESET FABRICA:";
const char txtPROGRAMAS[]= "PROGRAM.";
const char txtUSER[]= "    USER";
const char txtSI[]= "SI";
const char txtNO[]= "NO";
const char txtConfPreset[] ="PRESET";
const char txtPrgChange1[] ="PRG CHG1:";
const char txtMIDICh1[] ="MIDI CH1:";
const char txtPrgChange2[] ="PRG CHG2:";
const char txtMIDICh2[] ="MIDI CH2:";
const char txtCC1Code[] ="CC1:";
const char txtCC1Value[] ="Valor CC1:";
const char txtCC2Code[] ="CC2:";
const char txtCC2Value[] ="Valor CC2:";
const char txtUSERPRESET[] ="USER PRESET";

char msg[17];


char * CopyConst2Ram(char * dest, const char * src){
 char * d ;
 d = dest;
 for(;*dest++ = *src++;)
 ;
 return d;
}


void InitHD44780CustomChars()
{
 char i;
 LCD_Cmd(64);
 for (i = 0; i <= 63 ; i++)
 LCD_Chr_Cp(NumGrandes[i]);
 LCD_Cmd(_LCD_RETURN_HOME);
}


void Refresco_Leds()
{
 PORTC = PORTC & 0xF0;
 switch (programa)
 {
 case 1:
 PORTC = PORTC | 0x01;
 break;
 case 2:
 PORTC = PORTC | 0x02;
 break;
 case 3:
 PORTC = PORTC | 0x04;
 break;
 case 4:
 PORTC = PORTC | 0x08;
 break;
 }
}


void Refresco_Pantalla()
{
char num_prog;

Refresco_Leds();

num_prog = programa+(4*banco);

 if (!modo_menu)
 {
 LCD_Cmd(_LCD_CURSOR_OFF);
 LCD_Cmd(_LCD_CLEAR);

 if (!modo)
 {
 LCD_Out(1,1,CopyConst2Ram(msg,txtBANK));
 LCD_Out(1,10,CopyConst2Ram(msg,txtPROG));


 Lcd_Chr(1, 7,digito_sup[banco]);
 Lcd_Chr(2, 7,digito_inf[banco]);

 Lcd_Chr(1, 16,digito_sup[programa]);
 Lcd_Chr(2, 16,digito_inf[programa]);
 }
 else
 {
 LCD_Out(1,1,CopyConst2Ram(msg,txtUSERPRESET));

 Lcd_Chr(1, 14,digito_sup[num_prog/100]);
 Lcd_Chr(2, 14,digito_inf[num_prog/100]);

 Lcd_Chr(1, 15,digito_sup[(num_prog/10)%10]);
 Lcd_Chr(2, 15,digito_inf[(num_prog/10)%10]);

 Lcd_Chr(1, 16,digito_sup[num_prog%10]);
 Lcd_Chr(2, 16,digito_inf[num_prog%10]);
 }
 }
 else
 {
 LCD_Cmd(_LCD_CLEAR);


 if (opcion_menu < 4)
 LCD_Out(1,2,CopyConst2Ram(msg,txtConf));
 else
 {
 LCD_Out(1,3,CopyConst2Ram(msg,txtConfpreset));
 LCD_chr(1,12,(num_prog/10)+48);
 LCD_chr(1,13,(num_prog%10)+48);
 }

 switch (opcion_menu)
 {
 case 0:
 LCD_Out(2,1,CopyConst2Ram(msg,txtMIDICH));
 LCD_chr(2,15,(canal/10)+48);
 LCD_chr(2,16,(canal%10)+48);
 break;
 case 1:
 LCD_Out(2,1,CopyConst2Ram(msg,txtModo));
 if (!modo)
 LCD_Out(2,7,CopyConst2Ram(msg,txtPROGRAMAS));
 else
 LCD_Out(2,7,CopyConst2Ram(msg,txtUSER));
 break;
 case 2:
 LCD_Out(2,1,CopyConst2Ram(msg,txttouchmode));
 if (!modo)
 LCD_Out(2,14,CopyConst2Ram(msg,txtNO));
 else
 LCD_Out(2,14,CopyConst2Ram(msg,txtSI));
 break;
 case 3:
 LCD_Out(2,1,CopyConst2Ram(msg,txtreset));
 if (!modo_reset)
 LCD_Out(2,15,CopyConst2Ram(msg,txtNO));
 else
 LCD_Out(2,16,CopyConst2Ram(msg,txtSI));
 break;
 case 4:
 LCD_Out(2,1,CopyConst2Ram(msg,txtprgchange1));
 LCD_chr(2,14,(presetusuario.prgchange1/100)+48);
 LCD_chr(2,15,((presetusuario.prgchange1/10)%10)+48);
 LCD_chr(2,16,(presetusuario.prgchange1%10)+48);
 break;
 case 5:
 LCD_Out(2,1,CopyConst2Ram(msg,txtmidich1));

 LCD_chr(2,15,((presetusuario.midich1/10)%10)+48);
 LCD_chr(2,16,(presetusuario.midich1%10)+48);
 break;
 case 6:
 LCD_Out(2,1,CopyConst2Ram(msg,txtprgchange2));
 LCD_chr(2,14,(presetusuario.prgchange2/100)+48);
 LCD_chr(2,15,((presetusuario.prgchange2/10)%10)+48);
 LCD_chr(2,16,(presetusuario.prgchange2%10)+48);
 break;
 case 7:
 LCD_Out(2,1,CopyConst2Ram(msg,txtmidich2));

 LCD_chr(2,15,((presetusuario.midich2/10)%10)+48);
 LCD_chr(2,16,(presetusuario.midich2%10)+48);
 break;
 case 8:
 LCD_Out(2,1,CopyConst2Ram(msg,txtcc1code));
 LCD_chr(2,14,(presetusuario.cc1code/100)+48);
 LCD_chr(2,15,((presetusuario.cc1code/10)%10)+48);
 LCD_chr(2,16,(presetusuario.cc1code%10)+48);
 break;
 case 9:
 LCD_Out(2,1,CopyConst2Ram(msg,txtcc1value));
 LCD_chr(2,14,(presetusuario.cc1value/100)+48);
 LCD_chr(2,15,((presetusuario.cc1value/10)%10)+48);
 LCD_chr(2,16,(presetusuario.cc1value%10)+48);
 break;
 case 10:
 LCD_Out(2,1,CopyConst2Ram(msg,txtcc2code));
 LCD_chr(2,14,(presetusuario.cc2code/100)+48);
 LCD_chr(2,15,((presetusuario.cc2code/10)%10)+48);
 LCD_chr(2,16,(presetusuario.cc2code%10)+48);
 break;
 case 11:
 LCD_Out(2,1,CopyConst2Ram(msg,txtcc2value));
 LCD_chr(2,14,(presetusuario.cc2value/100)+48);
 LCD_chr(2,15,((presetusuario.cc2value/10)%10)+48);
 LCD_chr(2,16,(presetusuario.cc2value%10)+48);
 break;
 }
 }
}


void Reset_Fabrica()
{
int i;


for (i = 1;i <= (_num_presets_usuario * _parametros_preset);i+=8)
{
 EEPROM_Write(_inicio_eeprom_usuario+i,0x01);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+1,canal);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+2,0x01);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+3,canal);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+4,0x00);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+5,0x00);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+6,0x00);
 delay_ms(20);
 EEPROM_Write(_inicio_eeprom_usuario+i+7,0x00);
 delay_ms(20);
}

}


void cambio_programa()
{

 UART1_Write(0xC0+canal);
 delay_ms(150);

 UART1_Write(programa+(4*banco));


 Refresco_Pantalla();
#line 383 "F:/MidiFoot_LCD/svn/MidienC.c"
}
void Leer_Preset()
{

 char num_prog;
 num_prog = (programa+(4*banco))*_parametros_preset;

 PresetUsuario.PrgChange1 = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-1)));
 delay_ms(20);
 PresetUsuario.Midich1 = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-2)));
 delay_ms(20);
 PresetUsuario.PrgChange2 = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-3)));
 delay_ms(20);
 PresetUsuario.Midich2 = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-4)));
 delay_ms(20);
 PresetUsuario.CC1Code = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-5)));
 delay_ms(20);
 PresetUsuario.CC1Value = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-6)));
 delay_ms(20);
 PresetUsuario.CC2Code = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-7)));
 delay_ms(20);
 PresetUsuario.CC2Value = EEPROM_Read(_inicio_EEprom_usuario+(num_prog-(_parametros_preset-8)));
}



void cambio_preset()
{

 Leer_Preset();


 UART1_Write(0xC0+PresetUsuario.Midich1);
 delay_ms(150);

 UART1_Write(PresetUsuario.PrgChange1);
 delay_ms(150);
 UART1_Write(0xC0+PresetUsuario.Midich2);
 delay_ms(150);

 UART1_Write(PresetUsuario.PrgChange2);
 delay_ms(150);
 if ( PresetUsuario.CC1Code != 0 )
 {

 UART1_Write(0xB0+PresetUsuario.MidiCh2);
 delay_ms(150);

 UART1_Write(PresetUsuario.CC1Code);
 delay_ms(150);

 UART1_Write(PresetUsuario.CC1value);
 delay_ms(150);
 }
 if ( PresetUsuario.CC2Code != 0 )
 {

 UART1_Write(0xB0+PresetUsuario.MidiCh2);
 delay_ms(150);

 UART1_Write(PresetUsuario.CC2Code);
 delay_ms(150);

 UART1_Write(PresetUsuario.CC2value);
 delay_ms(150);
 }


 Refresco_Pantalla();
#line 463 "F:/MidiFoot_LCD/svn/MidienC.c"
}


void Inicializacion()
{



 SPBRG = 0x01;
 TXSTA = 0x20;
 RCSTA = 0x90;



 ADCON1 = 0x06;


 TRISA = 0xFF;
 TRISB = 0x00;
 TRISC = 0x00;


 PORTA = 0x00;
 PORTB = 0x00;
 PORTC = 0x00;


 UART1_Init(31250);


 LCD_Init();
 InitHD44780CustomChars();

 LCD_Cmd(_LCD_CURSOR_OFF);
 LCD_Cmd(_LCD_RETURN_HOME);
 LCD_Cmd(_LCD_CLEAR);


 banco = 0x00;


 canal = EEPROM_Read(0x00);
 modo = EEPROM_Read(0x01);
 touch_mode = EEPROM_Read(0x02);



 for (i = 0; i < 16; i++)
 {
 Lcd_Chr_Cp(welcome[i]);
 delay_ms(25);
 }

 LCD_Cmd(_LCD_SECOND_ROW);


 for (i = 0; i < 7; i++)
 {
 Lcd_Chr_Cp(welcome2[i]);
 delay_ms(25);
 }

 delay_ms(2000);
 LCD_Cmd(_LCD_CLEAR);






}

void Botones_FlancoPositivo()
{

 if ( button(&PORTA,0,1,1)) {
 if (flanco1 == 0 && modo_menu==0)
 {
 if (touch_mode && ult_pulsador == 1)
 {
 programa = programa_ant;
 banco = banco_ant;
 ult_pulsador = 0;
 }
 else
 {
 programa_ant = programa;
 programa = 0x01;
 ult_pulsador = 1;
 }

 if (!modo) cambio_programa();
 else cambio_preset();
 }

 flanco1 = 1;

 if ( tiempo_pulsacion > _long_button_time )
 {


 if (!modo_menu)
 {

 Modo_menu = 1;
 opcion_menu = 4;
 valor_menu = 0;

 programa = 1;

 Leer_Preset();

 Refresco_Pantalla();
 PORTC = PORTC & 0xF0;
 PORTC = PORTC | 0x01;
 }
 }
 else
 if (!modo_menu) tiempo_pulsacion++;
 }

 if ( button(&PORTA,1,1,1)) {

 if (flanco2 == 0 && Modo_menu == 0 )
 {
 if (touch_mode && ult_pulsador == 2)
 {
 programa = programa_ant;
 banco = banco_ant;
 ult_pulsador = 0;
 }
 else
 {
 programa_ant = programa;
 programa = 0x02;
 ult_pulsador = 2;
 }

 if (!modo) cambio_programa();
 else cambio_preset();
 }

 flanco2 = 1;


 if ( tiempo_pulsacion > _long_button_time )
 {


 if (!modo_menu)
 {

 Modo_menu = 1;
 opcion_menu = 4;
 valor_menu = 0;

 programa = 2;
 Leer_Preset();

 Refresco_Pantalla();
 PORTC = PORTC & 0xF0;
 PORTC = PORTC | 0x02;
 }
 }
 else
 if (!modo_menu) tiempo_pulsacion++;
 }

 if ( button(&PORTA,2,1,1)) {

 if ( flanco3 == 0 && Modo_menu == 0 )
 {
 if (touch_mode && ult_pulsador == 3)
 {
 programa = programa_ant;
 banco = banco_ant;
 ult_pulsador = 0;
 }
 else
 {
 programa_ant = programa;
 programa = 0x03;
 ult_pulsador = 3;
 }

 if (!modo) cambio_programa();
 else cambio_preset();
 }

 flanco3 = 1;


 if ( tiempo_pulsacion > _long_button_time )
 {


 if (!modo_menu)
 {

 Modo_menu = 1;
 opcion_menu = 4;
 valor_menu = 0;

 programa = 3;
 Leer_Preset();

 Refresco_Pantalla();
 PORTC = PORTC & 0xF0;
 PORTC = PORTC | 0x04;
 }
 }
 else
 if (!modo_menu) tiempo_pulsacion++;
 }

 if ( button(&PORTA,3,1,1)) {

 if ( flanco4 == 0 && Modo_menu == 0 )
 {
 if (touch_mode && ult_pulsador == 4)
 {
 programa = programa_ant;
 banco = banco_ant;
 ult_pulsador = 0;
 }
 else
 {
 programa_ant = programa;
 programa = 0x04;
 ult_pulsador = 4;
 }

 if (!modo) cambio_programa();
 else cambio_preset();
 }

 flanco4 = 1;


 if ( tiempo_pulsacion > _long_button_time )
 {



 if (!modo_menu)
 {
 Modo_menu = 1;
 opcion_menu = 4;
 valor_menu = 0;

 programa = 4;
 Leer_Preset();

 Refresco_Pantalla();
 PORTC = PORTC & 0xF0;
 PORTC = PORTC | 0x08;
 }
 }
 else
 if (!modo_menu) tiempo_pulsacion++;
 }

 if ( button(&PORTA,4,1,1)) {
 flanco5 = 1;
 if ( tiempo_pulsacion > _long_button_time )
 {
 tiempo_pulsacion = 0;
 flanco5 = 0;

 Modo_menu = 1;
 opcion_menu = 0;
 valor_menu = 0;

 Refresco_Pantalla();
 }
 else
 if (!modo_menu) tiempo_pulsacion++; else flanco5=0;
 }

 if ( button(&PORTA,5,1,1)) {
 flanco6 = 1;
 tiempo_pulsacion++;
 }
}

void Boton1_FlancoNegativo()
{



 if (flanco1 && button(&PORTA,0,1,0)) {
 flanco1 = 0;

 if (modo_menu==0)
 {
 tiempo_pulsacion = 0;

 }
 else
 {
 tiempo_pulsacion = 0;

 if (!edito_menu)
 {
 if ((opcion_menu!=0 && opcion_menu<4) || (opcion_menu>4)) opcion_menu--;
 Refresco_Pantalla();
 }
 else
 {
 switch (opcion_menu)
 {
 case 0:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 16;

 LCD_chr(2,15,(menu_canales[valor_menu])/10+48);
 LCD_chr(2,16,(menu_canales[valor_menu])%10+48);

 break;

 case 1:
 LCD_Out(2,7,CopyConst2Ram(msg,txtProgramas));
 modo = 0;
 break;

 case 2:
 LCD_Out(2,14,CopyConst2Ram(msg,txtNO));
 touch_mode = 0;
 break;
 case 3:
 LCD_Out(2,15,CopyConst2Ram(msg,txtNO));
 modo_reset = 0;
 break;
 case 4:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 100;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 5:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 16;

 LCD_chr(2,15,(((valor_menu)/10))+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 6:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 100;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 7:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 16;

 LCD_chr(2,15,(((valor_menu)/10))+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 8:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 127;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 9:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 127;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 10:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 127;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 11:

 if ( valor_menu > 0 )
 valor_menu--;
 else
 valor_menu = 127;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 }
 Lcd_cmd(_LCD_MOVE_CURSOR_LEFT);
 }
 }

 }

}

void Boton2_FlancoNegativo()
{

 if (flanco2 && button(&PORTA,1,1,0)) {
 flanco2 = 0;
 if ( tiempo_pulsacion < _long_button_time )
 {
 if (modo_menu==0)
 {


 tiempo_pulsacion = 0;

 }
 else
 {
 tiempo_pulsacion = 0;

 if (!edito_menu)
 {
 if ((opcion_menu<_Num_Opciones_Menu && opcion_menu<4) || (opcion_menu>=4 && opcion_menu<11)) opcion_menu++;
 Refresco_Pantalla();
 }
 else
 {
 switch (opcion_menu)
 {
 case 0:

 if ( valor_menu < 16 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,15,(menu_canales[valor_menu])/10+48);
 LCD_chr(2,16,(menu_canales[valor_menu])%10+48);

 break;

 case 1:
 LCD_Out(2,7,CopyConst2Ram(msg,txtUser));
 modo = 1;
 break;

 case 2:
 LCD_Out(2,14,CopyConst2Ram(msg,txtSi));
 touch_mode = 1;
 break;
 case 3:
 LCD_Out(2,15,CopyConst2Ram(msg,txtSI));
 modo_reset = 1;
 break;
 case 4:

 if ( valor_menu < 100 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;
 case 5:

 if ( valor_menu < 16 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,15,(((valor_menu)/10))+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 6:

 if ( valor_menu < 100 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 7:

 if ( valor_menu < 16 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,15,(((valor_menu)/10))+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 8:

 if ( valor_menu < 127 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 9:

 if ( valor_menu < 127 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 10:

 if ( valor_menu < 127 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;

 case 11:

 if ( valor_menu < 127 )
 valor_menu++;
 else
 valor_menu = 0;

 LCD_chr(2,14,(valor_menu)/100+48);
 LCD_chr(2,15,(((valor_menu)/10)%10)+48);
 LCD_chr(2,16,(valor_menu)%10+48);

 break;
 }
 Lcd_cmd(_LCD_MOVE_CURSOR_LEFT);
 }
 }
 }
 else
 tiempo_pulsacion = 0;
 }
}

void Boton3_FlancoNegativo()
{

 if (flanco3 && button(&PORTA,2,1,0)) {
 flanco3 = 0;
 if ( tiempo_pulsacion < _long_button_time )
 {
 if (modo_menu==0)
 {


 flanco3 = 0;
 tiempo_pulsacion = 0;

 }
 else
 {
 tiempo_pulsacion = 0;

 if (!edito_menu)
 {
 Lcd_cmd(_LCD_UNDERLINE_ON);
 Lcd_cmd(_LCD_BLINK_CURSOR_ON);
 Lcd_cmd(_LCD_MOVE_CURSOR_LEFT);

 edito_menu = 1;

 switch (opcion_menu)
 {
 case 1:
 valor_menu = canal;
 break;
 case 4:
 valor_menu = PresetUsuario.PrgChange1;
 break;
 case 5:
 valor_menu = PresetUsuario.Midich1;
 break;
 case 6:
 valor_menu = PresetUsuario.PrgChange2;
 break;
 case 7:
 valor_menu = PresetUsuario.midich2;
 break;
 case 8:
 valor_menu = PresetUsuario.cc1code;
 break;
 case 9:
 valor_menu = PresetUsuario.cc1value;
 break;
 case 10:
 valor_menu = PresetUsuario.cc2code;
 break;
 case 11:
 valor_menu = PresetUsuario.cc2value;
 break;
 }
 }
 else
 {
 LCD_Cmd(_LCD_CLEAR);
 if (!modo_reset)
 LCD_Out(1,2,"Guardando...");
 else
 LCD_Out(1,2,"Reseteando...");
 Lcd_cmd(_LCD_CURSOR_OFF);

 switch (opcion_menu)
 {
 case 0:
 canal = menu_canales[valor_menu];

 EEPROM_Write(0x00, canal);
 break;
 case 1:


 EEPROM_Write(0x01, modo);
 break;
 case 2:


 EEPROM_Write(0x02, touch_mode);
 break;
 case 3:

 Reset_Fabrica();
 modo_reset = 0;
 break;
 case 4:
 PresetUsuario.PrgChange1 = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-1))), PresetUsuario.PrgChange1);
 break;
 case 5:
 PresetUsuario.midich1 = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-2))), PresetUsuario.midich1);
 break;
 case 6:
 PresetUsuario.prgchange2 = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-3))), PresetUsuario.prgchange2);
 break;
 case 7:
 PresetUsuario.midich2 = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-4))), PresetUsuario.midich2);
 break;
 case 8:
 PresetUsuario.cc1code = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-5))), PresetUsuario.cc1code);
 break;
 case 9:
 PresetUsuario.cc1value = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-6))), PresetUsuario.cc1value);
 break;
 case 10:
 PresetUsuario.cc2code = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-7))), PresetUsuario.cc2code);
 break;
 case 11:
 PresetUsuario.cc2value = valor_menu;

 EEPROM_Write(_inicio_EEprom_usuario+((((programa+(4*banco))*_parametros_preset)-(_parametros_preset-8))), PresetUsuario.cc2value);
 break;
 }

 delay_ms(250);

 edito_menu = 0;
 valor_menu = 0;
 Modo_menu = 1;

 refresco_pantalla();

 }
 }
 }
 else
 tiempo_pulsacion = 0;
 }

}

void Boton4_FlancoNegativo()
{

 if (flanco4 && button(&PORTA,3,1,0)) {
 flanco4 = 0;
 if ( tiempo_pulsacion < _long_button_time )
 {
 if (!modo_menu)
 {
 tiempo_pulsacion = 0;

 }
 else
 {
 tiempo_pulsacion = 0;

 if (edito_menu==1)
 edito_menu = 0;
 else
 Modo_menu = 0;

 valor_menu = 0;
 LCD_Cmd(_LCD_CURSOR_OFF);

 refresco_pantalla();
 }
 }
 else
 tiempo_pulsacion = 0;
 }

}

void Boton5_6_FlancoNegativo()
{

 if (flanco5 && button(&PORTA,4,1,0)) {
 flanco5 = 0;

 banco_ant = banco;

 if (banco == 3) banco = 0x00;
 else banco = banco +1;


 Lcd_chr(2,2,42);
 Lcd_chr(2,3,42);

 tiempo_pulsacion = 0;
 ult_pulsador = 0;
 }

 if (flanco6 && button(&PORTA,5,1,0)) {
 flanco6 = 0;

 if (banco == 0) banco = 3;
 else banco = banco -1;

 tiempo_pulsacion = 0;
 }
}
#line 1302 "F:/MidiFoot_LCD/svn/MidienC.c"
void main() {

 Inicializacion();

 Refresco_Pantalla();


 while(1==1)
 {

 Botones_FlancoPositivo();

 Boton1_FlancoNegativo();
 Boton2_FlancoNegativo();
 Boton3_FlancoNegativo();
 Boton4_FlancoNegativo();
 Boton5_6_FlancoNegativo();
#line 1342 "F:/MidiFoot_LCD/svn/MidienC.c"
 }
}
